var express = require('express')
var router = express.Router()
var insurances = require('./../models/insurance')
var multer = require('multer')
let fs = require('fs')
let path = require('path')
let moment = require('moment')
const Utils = require('./../utils')

function returnRes(obj) {
	const { res, code, data, message } = obj
	res.json({
		code,
		data: data || null,
		message: message || '成功' //失败的情况下，需要传入失败信息 否则默认成功
	});
	return false
}

// ------------------------------【后台】
// 1.【新增】
router.post('/add', function (req, res, next) {
	let insuranceObj = req.body
	//  注意 =====【find查询来的数组是没有save方法的，但是数组项是有save方法的】
	insurances.find(function (err0, doc0) {
		//添加id
		insuranceObj.id = Utils.genID(5)
		if (doc0 == '' || doc0 == null) {
			/*逻辑【1】 新建集合
			 **  整理数据
			 */

			// 插入数据
			insurances.create([insuranceObj], function (err1, doc1) {
				if (err1) {
					returnRes({ res, code: -1, message: err1 })
				} else {
					returnRes({ res, code: 0, message: '创建成功' })
				}
			})
		} else {
			/*逻辑【2】 新增数据
			 *  如果没有传id,那么新数据项需要加id
			 */
			//  注意 =====【find查询来的数组是没有save方法的，但是数组项是有save方法的，另外也可以直接new 一个modal出来使用它的save】
			let data = new insurances(insuranceObj)
			data.save(function (err3, doc3) {
				if (err3) {
					returnRes({ res, code: -1, message: err3 })
				} else {
					returnRes({ res, code: 0, message: '新增成功' })
				}
			})
		}
	})
})
// 2.【查看】
router.post('/getList', function (req, res, next) {
	/**
	 *  parentId //用来查一级分类
	 *  secondIdList //用来查二级分类
	 *  id  //用来查单独一篇文章
	 */
	let { id, secondIdList, parentId, pageSize, pageNum } = req.body
	const where = {
		parentId: parentId,
		secondId: { $in: secondIdList }, //要查结果是否在条件数组中，使用$in
		id: id,
	}
	for (let item in where) {
		if (!where[item]) {
			delete where[item]
		}
	}
	// 去掉的条件是去掉空数组的，数组要单独删除
	if (!secondIdList || (secondIdList && secondIdList.length == 0)) {
		delete where['secondId']
	}
	// 先获取总条数
	insurances.countDocuments(where, function (err, count) {
		if (err) {
			returnRes({ res, code: -1, message: err })
			return false
		}
		// 再获取分页数据
		insurances
			.find(where)
			.skip((pageNum - 1) * parseInt(pageSize))
			.limit(parseInt(pageSize))
			.exec(function (err1, doc1) {
				if (err1) {
					returnRes({ res, code: -1, message: err1 })
				} else {
					returnRes({
						res, code: 0, message: '查询成功', data: {
							data: doc1 || [],
							total: count,
						},
					})

				}
			})
	})
})
// 读取文章详情
router.post('/detail', function (req, res, next) {
	let { id } = req.body
	insurances.find({ id }, function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
			return false
		}
		res.json({
			code: '200',
			data: doc0[0] || {},
			message: '成功',
			success: true,
		})
	})
})
// 3.【删除】
router.post('/delete', function (req, res, next) {
	var param = {
		id: req.body.id,
	}
	insurances.deleteOne(param,function (err, doc) {
		if (err) {
			returnRes({ res, code: -1, message: err })
		} else {
			returnRes({ res, code: 0, message: '删除成功' })
		}
	})
})
// 4.【修改】
router.post('/edit', function (req, res, next) {
	var param = {
		id: req.body.id,
	}
	insurances.updateOne(param, req.body, function (err, doc) {
		if (err) {
			returnRes({ res, code: -1, message: err })
		} else {
			returnRes({ res, code: 0, message: '修改成功' })
		}
	})
})


// 读取文章列表--【前台】
router.post('/articleList', function (req, res, next) {
	/**
	 *  parentId //用来查一级分类
	 *  secondIdList //用来查二级分类
	 *  id  //用来查单独一篇文章
	 */
	let { id, secondIdList, parentId, pageSize, pageNum } = req.body
	const where = {
		parentId: parentId,
		secondId: { $in: secondIdList }, //要查结果是否在条件数组中，使用$in
		id: id,
	}
	for (let item in where) {
		if (!where[item]) {
			delete where[item]
		}
	}
	// 去掉的条件是去掉空数组的，数组要单独删除
	if (!secondIdList || (secondIdList && secondIdList.length == 0)) {
		delete where['secondId']
	}
	console.log(where)
	// 先获取总条数
	insurances.countDocuments(where, function (err, count) {
		if (err) {
			res.json({
				code: '201',
				data: null,
				message: err,
				code:500,
			})
			return false
		}

		// 再获取分页数据
		insurances
			.find(where)
			.skip((pageNum - 1) * parseInt(pageSize))
			.limit(parseInt(pageSize))
			.exec(function (err1, doc1) {
				if (err1) {
					res.json({
						code: '201',
						data: null,
						message: err1,
						code:500,
					})
				} else {
					res.json({
						code: '200',
						data: {
							data: doc1 || [],
							total: count,
						},
						message: '成功',
						success: true,
					})
				}
			})
	})
})

//继续阅读
router.post('/keepList', function (req, res, next) {
	let { parentId, secondId, id } = req.body
	//  全匹配查询，查询满足parentId和secondId，但是不满足id的数据
	const where = {
		parentId,
		secondId,
		id: { $ne: id },
	}
	insurances.find(where, function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
		} else {
			res.json({
				code: '200',
				data: doc0,
				message: '成功',
				success: true,
			})
		}
	})
})

// 随机文章
router.post('/radomArticle', function (req, res, next) {
	insurances.find(function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
		} else {
			// 文章超过5篇才需要显示随机文章,并且 不能重复
			let randomArry = []
			for (let i = 0; i < 5; i++) {
				let len = doc0.length
				let ran = Math.floor(Math.random() * len)
				randomArry.push(doc0[ran])
				doc0.splice(ran, 1)
			}
			res.json({
				code: '200',
				data: randomArry,
				message: '成功',
				success: true,
			})
		}
	})
})

//上一篇，下一篇
router.post('/nextPreList', function (req, res, next) {
	let { id } = req.body
	insurances.find(function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
		} else {
			doc0.forEach((item, index) => {
				if (item.id == id) {
					// 拿到当前文章的index,再获取上一篇，下一篇文章的位置
					res.json({
						code: '200',
						data: {
							pre: doc0[index - 1],
							next: doc0[index + 1],
						},
						message: '成功',
						success: true,
					})
				}
			})
		}
	})
})

// 搜素文章，返回列表
router.post('/search', function (req, res, next) {
	let { value } = req.body
	// 模糊查询
	const where = {
		$or: [{ title: { $regex: value, $options: '$i' } }],
	}
	insurances.find(where, function (err0, doc0) {
		if (err0) {
			res.json({
				code: '201',
				data: null,
				message: err0,
				code:500,
			})
			return false
		}
		res.json({
			code: '200',
			data: doc0,
			message: '成功',
			success: true,
		})
	})
})

// 读取文章列表--【后台台】
router.post('/articleListBack', function (req, res, next) {
	// let pageSize = req.param("pageSize")
	// let pageNum = req.param("pageNum")
	// let Collect = { userName: req.param("userName") }
	// let skip = (pageNum - 1) * pageSize //从哪一条开始查询
	// let totol; //总条数

	/**
	 *name: '', //名称
	 *id: null, //id
	 *typesList: [],  //类型列表
	 *
	 */
	let { id, title, typesList, pageSize, pageNum } = req.body

	//同时查询title、id、types，id严格匹配，title模糊匹配，types存在于数组typesList中的文章
	const where = {
		$or: [{ title: { $regex: title, $options: '$i' } }],
		id: id,
		types: { $in: typesList }, //要查结果是否在条件数组中，使用$in
	}
	// 处理传空的项目，传空的话，就不要输入该项的查询条件，直接删除此项,保证传空也可以查询全部

	for (let item in where) {
		if (!where[item]) {
			delete where[item]
		}
	}
	// 去掉的条件是去掉空数组的，数组要单独删除
	if (typesList && typesList.length == 0) {
		delete where['types']
	}
	// 先获取总条数
	insurances.countDocuments(where, function (err, count) {
		if (err) {
			res.json({
				code: '201',
				data: null,
				message: err,
				code:500,
			})
			return false
		}

		// 再获取分页数据
		insurances
			.find(where)
			.skip((pageNum - 1) * parseInt(pageSize))
			.limit(parseInt(pageSize))
			.exec(function (err1, doc1) {
				if (err1) {
					res.json({
						code: '201',
						data: null,
						message: err1,
						code:500,
					})
				} else {
					//注意 传入分类数组的话，还需要对结果进行过滤
					// let typeArry = []

					// if (typesList && typesList.length > 0) {
					// 	typesList.forEach((item, index) => {
					// 		doc1.filter(
					// 			(item1, index1) => item1.types == item
					// 		)[0] &&
					// 			typeArry.push(
					// 				doc1.filter(
					// 					(item1, index1) => item1.types == item
					// 				)[0]
					// 			)
					// 	})
					// } else {
					// 	typeArry = doc1
					// }

					res.json({
						code: '200',
						data: {
							data: doc1 || [],
							total: count,
						},
						message: '成功',
						success: true,
					})
				}
			})
	})
})


module.exports = router
